﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Onshi.POS.Articulos;
using Onshi.POS.Articulos.Vistas;
using Onshi.POS.Formularios.Properties;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Entidades;
using System.Configuration;

namespace Onshi.POS.Formularios.Controles
{
    public partial class ArticulosSeleccionar : UserControl, IArticulosSeleccionar
    {
        #region Constructores

        public ArticulosSeleccionar()
        {
            InitializeComponent();
            presentador = new ArticulosSeleccionarPresentador(this);
        }

        #endregion

        #region Atributos

        private Boolean todos;
        private ArticulosSeleccionarPresentador presentador;
        private Int32 idArticulo;
        public delegate void SeleccionadoHandler();
        public event SeleccionadoHandler Seleccionado = delegate { };
        private EnumArticulosTiposSelecciones tipoSeleccion;
        private DataTable tablaSeleccion;
        private List<ArticuloExistencia> listadoSeleccion;
        private Int32 idDetalle;

        #endregion

        #region Propiedades

        public Boolean Todos
        {
            get { return todos; }
            set { todos = value; }
        }

        [Browsable(false)]
        public Int32 IdArticuloSeleccionado
        {
            get { return idArticulo; }
            set { idArticulo = value; }
        }

        private List<Int32> idVariantesDetalles;

        [Browsable(false)]
        public List<Int32> IdVariantesDetalles
        {
            get { return idVariantesDetalles; }
            set { idVariantesDetalles = value; }
        }

        [Browsable(false)]
        public Int32 IdArticulo
        {
            get { return idArticulo; }
            set { idArticulo = value; }
        }

        [Browsable(false)]
        public String Nombre
        {
            set { txtNombre.Text = value; }
        }

        [Browsable(false)]
        public String Codigo
        {
            get { return txtCodigo.Text; }
            set { txtCodigo.Text = value; }
        }

        [Browsable(false)]
        public List<ArticuloExistencia> ListadoSeleccion
        {
            get { return listadoSeleccion; }
            set { listadoSeleccion = value; }
        }

        [Browsable(false)]
        public DataTable TablaSeleccion
        {
            set { tablaSeleccion = value; }
        }

        [Browsable(false)]
        public Int32 IdDetalle
        {
            get { return idDetalle; }
        }

        public EnumArticulosTiposSelecciones TipoSeleccion
        {
            get { return tipoSeleccion; }
            set { tipoSeleccion = value; }
        }

        #endregion

        #region Metodos

        private void LimpiarCampos()
        {
            idArticulo = (Int32)EnumArticulos.Todos;
            tablaSeleccion = null;
            if (todos)
                txtNombre.Text = "[Todos]";
            else
                txtNombre.Text = String.Empty;
            txtCodigo.Text = String.Empty;
            Seleccionado();
            btnLimpiar.Enabled = false;
        }

        public void Actualizar()
        {
            if (idArticulo == (Int32)EnumArticulos.Todos)
                LimpiarCampos();
            else
            {
                try
                {
                    presentador.Seleccionar();
                    Seleccionado();
                    btnLimpiar.Enabled = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        #endregion

        #region Eventos

        private void btnSeleccionar_Click(Object sender, EventArgs e)
        {
            var articulos = new Articulos(true);
            if (articulos.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    idArticulo = articulos.IdArticuloSeleccionado;
                    presentador.Seleccionar();
                    if (tablaSeleccion != null)
                    {
                        var articulosSeleccionarDetalle = new ArticulosSeleccionarDetalle(tablaSeleccion);
                        if (articulosSeleccionarDetalle.ShowDialog() == DialogResult.OK)
                        {
                            idDetalle = articulosSeleccionarDetalle.IdDetalleSeleccionado;
                            presentador.SeleccionarConDetalles();
                            Seleccionado();
                            btnLimpiar.Enabled = true;
                        }
                        else
                        {
                            LimpiarCampos();
                        }
                    }
                    else
                    {
                        Seleccionado();
                        btnLimpiar.Enabled = true;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LimpiarCampos();
                }
            }
        }

        private void btnLimpiar_Click(Object sender, EventArgs e)
        {
            LimpiarCampos();
        }

        private void ArticulosSeleccionar_Load(Object sender, EventArgs e)
        {
            LimpiarCampos();
        }

        private void txtCodigo_Validating(Object sender, CancelEventArgs e)
        {
            if (String.IsNullOrWhiteSpace(txtCodigo.Text))
                LimpiarCampos();
            else
            {
                try
                {
                    presentador.SeleccionarPorCodigo();
                    Seleccionado();
                    btnLimpiar.Enabled = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LimpiarCampos();
                }
            }
        }

        #endregion


        public Tuple<int, List<ArticuloExistencia>> ListadoSeleccionCompuesto
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public Tuple<int, DataTable> TablaSeleccionCompuesto
        {
            set { throw new NotImplementedException(); }
        }

        public Tuple<int, List<int>> IdVariantesDetallesCompuesto
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }
    }
}
